<?php
require_once("assets/tool/security_image/securimage.php");

class AccountController extends HomeController
{
	private function check_catcha($s_catcha)
	{
		$img 	= new Securimage();
		$valid 	= $img->check($s_catcha);

		return $valid;
	}
	
	public function actionIndex()
	{
		$this->render('index');
	}
	
	public function actionPassword()
	{
		
		if(isset($_REQUEST["txt_passwordOld"]))
		{
			$s_passwordOld	= $_REQUEST["txt_passwordOld"];
			$s_passwordNew	= $_REQUEST["txt_password"];
			$s_confirmation	= $_REQUEST["txt_confirmation"];
			
			if(strlen($s_passwordNew) <= 4)
			{
				$arr_error = array("error" => "Mật khẩu mới không được bỏ trống, và nhiều hơn 4 ký tự.");
				exit(json_encode($arr_error));
			}
    		
			if($s_passwordNew != $s_confirmation)
			{
				$arr_error = array("error" => "Mật khẩu bạn nhập vào không khớp.");
				exit(json_encode($arr_error));
			}
			
			$s_passwordOld = hash("sha512", $s_passwordOld);
			$s_confirmation = hash("sha512", $s_confirmation);

			$command = Yii::app()->db->createCommand("CALL account_08_password
			(
				:p_account,
				:p_password_old,
				:p_password_new
			)");
			  
			$command->bindValue("p_account",Yii::app()->user->name);
			$command->bindValue("p_password_old",$s_passwordOld);
			$command->bindValue("p_password_new",$s_confirmation);
			
			try
			{
				$i_result = $command->execute();
				if($i_result >=1)
				{
					$arr_result = array("isSuccess" => 1);
	    			exit(json_encode($arr_result));
				}
				else
				{
					$arr_result = array("error" => "Có lỗi trong quá trình thêm mới, vui lòng thử lại sau.");
    				exit(json_encode($arr_result));
				}
			}//End Try
			catch (CDbException $ex)
			{
				$arr_result = array("error" => $ex->getMessage());
    			exit(json_encode($arr_result));
			}			
		}//End if(isset($_REQUEST["txt_passwordOld"]))
		else 
		{
			$this->render("password");
		}
	}
	
	public function actionModify()
	{
		if(isset($_REQUEST["txt_name"]))
		{
			$s_name		= $_REQUEST["txt_name"];
    		$s_email	= $_REQUEST["txt_email"];
    		
			if(strlen($s_name) <= 4)
			{
				$arr_error = array("error" => "Tên người dùng không được bỏ trống, và nhiều hơn 4 ký tự.");
				exit(json_encode($arr_error));
			}
			
			if(strlen($s_email) <= 4)
			{
				$arr_error = array("error" => "E-mail người dùng không được bỏ trống, và nhiều hơn 4 ký tự.");
				exit(json_encode($arr_error));
			}
			
			$command = Yii::app()->db->createCommand("CALL account_07_modification
			(
				:p_account,
				:p_name,
				:p_email,
				:p_address,
				:p_is_female,
				:p_phone,
				:p_birth
			)");
			  
			$command->bindValue("p_account",Yii::app()->user->name);
			$command->bindValue("p_name",$s_name);
			$command->bindValue("p_email",$s_email);
			$command->bindValue("p_address",CHtml::encode($_REQUEST["ta_address"]));
			$command->bindValue("p_is_female",$_REQUEST["ra_sex"],PDO::PARAM_INT);
			$command->bindValue("p_phone",$_REQUEST["txt_phone"]);
			$command->bindValue("p_birth",$_REQUEST["d_birth"]);
			
			try
			{
				$i_result = $command->execute();
				if($i_result >=1)
				{
					$arr_result = array("isSuccess" => 1);
	    			exit(json_encode($arr_result));
				}
				else
				{
					$arr_result = array("error" => "Có lỗi trong quá trình thêm mới, vui lòng thử lại sau.");
    				exit(json_encode($arr_result));
				}
			}//End Try
			catch (CDbException $ex)
			{
				$arr_result = array("error" => $ex->getMessage());
    			exit(json_encode($arr_result));
			}
		}
		else 
		{
			$model=Account::model()->findByAttributes(array("identity"=>Yii::app()->user->name));
			
			$this->render("modify", array("o_account"=>$model));
		}
	}
	
	public function actionRegister()
	{
		if(isset($_REQUEST["txt_name"]))
		{
			$s_name			= $_REQUEST["txt_name"];
    		$s_account		= $_REQUEST["txt_account"];
    		$s_password		= $_REQUEST["txt_password"];
    		$s_email		= $_REQUEST["txt_email"];
    		
			if(strlen($s_name) <= 4) {
	    	
	    		$arr_error = array("error" => "Tên người dùng không được bỏ trống, và nhiều hơn 4 ký tự.");
	    		exit(json_encode($arr_error));
	    	}
	    	 
	    	if(strlen($s_account) <= 4) {
	    	
	    		$arr_error = array("error" => "Tài khoản người dùng không được bỏ trống, và nhiều hơn 4 ký tự.");
	    		exit(json_encode($arr_error));
	    	}
	    	 
	    	$specialChar="`~!@#$%^&*()_-+=}{][|:;><,.?/".'"'."'";
	    	for ($i=0; $i<=strlen($specialChar); $i++) {
	    		if (isset($specialChar[$i]) && strpos($s_account,$specialChar[$i]) !==false){
	    	
	    			$arr_error = array("error" => "Tên tài khoản không chứa ký tự đặc biệt.");
	    			exit(json_encode($arr_error));
	    		}
	    	}
	    	 
	    	if(strlen($s_password) <= 4) {
	    	
	    		$arr_error = array("error" => "Mật khẩu người dùng không được bỏ trống, và nhiều hơn 4 ký tự.");
	    		exit(json_encode($arr_error));
	    	}
	    	 
	    	if(strlen($s_email) <= 4) {
	    	
	    		$arr_error = array("error" => "E-mail người dùng không được bỏ trống, và nhiều hơn 4 ký tự.");
	    		exit(json_encode($arr_error));
	    	}
			
			$command = Yii::app()->db->createCommand("CALL account_02_register
			(
				:p_account,
				:p_pass,
				:p_name,
				:p_email,
				:p_is_female,
				:p_address,
				:p_birth
			)");
			
			$s_password = hash("sha512", $s_password);
			  
			$command->bindValue("p_account",$s_account);
			$command->bindValue("p_pass",$s_password);
			$command->bindValue("p_name",$s_name);
			$command->bindValue("p_email",$s_email);
			$command->bindValue("p_is_female",$_REQUEST["ra_sex"],PDO::PARAM_INT);
			$command->bindValue("p_address",CHtml::encode($_REQUEST["ta_address"]));
			$command->bindValue("p_birth",$_REQUEST["d_birth"]);
			
			try
			{
				$i_result = $command->execute();
				if($i_result >=1)
				{
					$arr_result = array("result" => 1);
	    			exit(json_encode($arr_result));
				}
				else
				{
					$arr_result = array("error" => "Có lỗi trong quá trình thêm mới, vui lòng thử lại sau.");
    				exit(json_encode($arr_result));
				}
			}//End Try
			catch (CDbException $ex)
			{
				$arr_result = array("error" => $ex->getMessage());
    			exit(json_encode($arr_result));
			}			
		}//End if(isset($_REQUEST["txt_name"]))
		else 
		{
			$this->render('register');
		}
	}
	
	public function actionLogin()
	{
		$s_userName = $_REQUEST["txt_account"];
		$s_password = hash("sha512", $_REQUEST["txt_password"]);
		$s_catcha	= $_REQUEST["txt_catcha"];
		
	    if( $s_catcha!="" && $this->check_catcha($s_catcha) == false )
	    {
    		$arr_error = array("error" => "Mã xác nhận không đúng.");
    		exit(json_encode($arr_error));
    	}
				
		if(!isset(Yii::app()->session["ss_login_fail"]))
			Yii::app()->session["ss_login_fail"] = 0;
		
		$m_model = $this->loadModelByLogin($s_userName, $s_password);
		$account = new UserIdentity($s_userName,$s_password);
		$account->authenticate();
		
		if($account->errorCode !== UserIdentity::ERROR_NONE)
		{
			Yii::app()->session["ss_login_fail"] += 1;
			$result = array("count"=>Yii::app()->session["ss_login_fail"]);
			exit(json_encode($result));
		}
		else
		{
			unset(Yii::app()->session["ss_login_fail"]);
			
			$duration= (isset($_REQUEST["remember_me"]) ? 3600*24*30 : 0); // 30 days
			Yii::app()->user->login($account,$duration);
			$result = array("count"=>$account->errorCode);
			exit(json_encode($result));
		}
		Yii::app()->end();
	}
	
	public function loadModelByLogin($s_userName,$s_password)
	{
		$model=Account::model()->findByAttributes(array("identity"=>$s_userName,"password"=>$s_password));
		//if($model===null)
		//	throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}
}
?>